package com.link.base.base.accntconsumer.service;

import com.link.base.base.accnt.model.AccountPerson;
import com.link.base.base.accnt.model.ListOfTags;
import com.link.base.base.accnt.model.TagGroup;
import com.link.base.base.accnt.model.TagItem;
import com.link.base.base.accntconsumer.model.AccountConsumer;
import com.link.base.wechat.wxsubscriber.model.Subscriber;
import com.link.core.basic.service.BasicService;

import java.util.List;
import java.util.Map;

/**
 * 消费者
 *
 * @author 曲元涛
 * @date 2020-07-01 18:12:52
 */
public interface AccountConsumerService extends BasicService<AccountConsumer> {

    /**
     * 根据条件查询消费者
     *
     * @author 顾桂山
     * @date 2020-02-17 17:59:34
     */
    AccountConsumer queryUniqueByExample(AccountConsumer record) throws Exception;

    /**
     * 插入消费者，消费者地址，消费者标签
     *
     * @author 景隆东
     * @param accntline 消费者
     */
    void moreModelInsert(AccountConsumer accntline) throws Exception;

    /**
     * 获取虚拟消费者（系统参数）
     *
     * @param corpId 账套ID
     */
    String getVirtualAccount(Long corpId);

    /**
     * 检查消费者是否存在
     *
     * @param accountConsumer 消费者
     */
    AccountConsumer checkAccount(AccountConsumer accountConsumer) throws Exception;

    /**
     * 通过客户id查询标签列表
     *
     * @param record 企点标签
     * @date 2017年3月27日
     */
    List<TagItem> queryTagsById(TagItem record) throws Exception;

    /**
     * 更新标签列表信息
     *
     * @param list 测量信息列表
     */
    public void updateTagList(ListOfTags list) throws Exception;

    /**
     * 查询企点客户的状态数据
     *
     * @param entity 企点标签
     */
    List<TagItem> queryQdAccntTags(TagItem entity) throws Exception;

    /**
     * 查询企点客户的状态数据
     *
     * @param entity 企点标签组
     */
    List<TagItem> queryQdAccntTagGroups(TagGroup entity) throws Exception;

    /**
     * 查询导购姓名列表
     * @param account 消费者
     */
    List<String> queryGuideList(AccountConsumer account) throws Exception;

    /**
     * 客户-识别顾客中间表对象 插入中间表
     *
     * @author : LiQun
     * @param entity 客户-识别顾客中间表对象
     * @throws Exception 异常信息
     * @date : 下午3:57 2018/5/7
     */
    void accountPersonInsert(AccountPerson entity) throws Exception;

    /**
     * 清空客户微信seq
     *
     * @param record 消费者
     */
    void emptyAccntSeq(AccountConsumer record) throws Exception;

    /**
     * 查询客户简单信息 根据wxopenid
     *
     * @param wxOpenId 微信OPENID
     * @return 消费者
     */
    AccountConsumer querySimpleAccntByWxOpenId(String wxOpenId) throws Exception;

    /**
     * 根据小程序openId查询消费者信息
     *
     * @param accountConsumer 消费者
     */
    AccountConsumer queryConsumerByOpenId(AccountConsumer accountConsumer) throws Exception;

    /**
     * 插入消费者信息，小程序登录接口用
     * @author Lizt
     * @param accountConsumer 消费者
     * @date 2018/7/31
     */
    void addConsumer(AccountConsumer accountConsumer) throws Exception;

    /**
     * 更新消费者信息
     * @author Lizt
     * @param account 消费者
     * @date 2018/7/31
     */
    Map<String,Object> modifyConsumer(AccountConsumer account) throws Exception;

    /**
     * 更新微信消费者信息
     * 根据客户信息更新微信消费者信息
     *
     * @param accountConsumer 消费者
     */
    Subscriber updateSubscriberInfo(AccountConsumer accountConsumer) throws Exception;

    /**
     * 微信加密数据解密
     *
     * @author KuangRuifeng
     * @date 2018年11月29日
     * @param record 查询数据
     * @return result 解密的数据
     * @throws Exception 异常信息
     */
    Map<String, Object> decryptWxData(AccountConsumer record) throws Exception;

    /**
     * 根据一个消费者信息，带出消费者对应所有会员信息
     * Attr1标记是根据会员查还是根据电话号码查
     * @author wangdawei
     * @param entity 消费者
     */
    List<AccountConsumer> queryAcctListById(AccountConsumer entity) throws Exception;

    /**
     * 小程序获取到手机号码后更新消费者手机号码信息
     * @author KuangRuifeng
     * @date 2018/12/18
     * @param record 手机号码信息
     * @return 更新结果和信息
     * @throws Exception 异常信息
     */
    Map<String, Object> updMobilePhoneInfo(AccountConsumer record) throws Exception;

    /**
     * 查询访客信息
     * @param entity 消费者
     */
    AccountConsumer queryAcctAndMember(AccountConsumer entity) throws Exception;

    /**
     * 判断当前小程序用户尝试登陆使用的手机号码是否合法
     * @author KuangRuifeng
     * @date 2019/3/14
     * @param record 手机号码信息
     * @return 判断结果和信息
     * @throws Exception 异常
     */
    Map<String, Object> checkMpLoginPhone(AccountConsumer record) throws Exception;

    /**
     * 新建消费者，对接DMP新建消费者接口，由DMP返回渠道消费者及父消费者（可无）
     * 再将返回信息保存至link数据库
     *
     * @author NingLanhao
     * @param entity 消费者
     * @return AccountConsumer 新建后的数据
     * @date 2019-03-26 11:04
     * @throws Exception 异常
     */
    AccountConsumer saveAccountToDmp(AccountConsumer entity) throws Exception;

    /**
     * 检查渠道消费者书否存在，存在返回，否则新建
     *
     * @author NingLanhao
     * @date 2019-03-29 11:56
     * @param entity 消费者查询条件 1.手机号 2.公司ID 3.消费者渠道
     * @return AccountConsumer 消费者
     */
    AccountConsumer checkChannelConsumer(AccountConsumer entity) throws Exception;

    /**
     * 检查渠道消费者书否存在，存在更新，否则新建
     *
     * @author NingLanhao
     * @date 2019-03-29 11:56
     * @param entity 消费者查询条件 1.手机号 2.公司ID 3.消费者渠道
     * @return AccountConsumer 消费者
     */
    AccountConsumer checkChannelConsumerForUpdate(AccountConsumer entity) throws Exception ;

    /**
     * 修改消費者
     * @author zengchi
     * @date 2019-09-26 13:56
     * @param entity 消费者
     *
     */
    void updateConsumer(AccountConsumer entity) throws Exception;

    /**
     * 查询消费者
     * @author zengchi
     * @date 2019-09-30 13:56
     * @param id 消费者id
     *
     */
    AccountConsumer queryConsumerById(Long id) throws Exception;

    /**
     * 微信更新消费者
     *
     * @author huanglongjian
     * @date 2019-10-22 14:19
     */
    AccountConsumer wxUpdateAccount(AccountConsumer account) throws Exception;

    /**
     * 根据手机号生成消费者
     * @author 杨锐
     * @param entity 消费者
     * @date 2020-02-21 20:14:48
     **/
    AccountConsumer newConsumerByPhone(AccountConsumer entity) throws Exception;

    /**
     * 更新渠道消费者 mobilePhone or openId
     * @param entity 消费者
     */
    public void consumerUpdate(AccountConsumer entity) throws Exception;

    /**
     * 根据统一消费者ID查询消费者标签
     *
     * @author 曲元涛
     * @date 2020/3/10 15:15
     * @param uniqueConsumerId 统一消费者ID
     */
    Map<String, Object> queryConsumerTag(Long uniqueConsumerId) throws Exception;

    /**
     * 根据一些条件查询消费者
     *
     * @author 李杨
     * @date 2020-03-05
     * @param accountConsumer 消费者
     */
    public List<AccountConsumer> queryConsumerByCondition(AccountConsumer accountConsumer) throws Exception;
}